package com.showmaker.controller;

import com.showmaker.bean.Setmeal;
import com.showmaker.constant.MessageConstant;
import com.showmaker.constant.RedisConstant;
import com.showmaker.entity.PageResult;
import com.showmaker.entity.QueryPageBean;
import com.showmaker.entity.Result;
import com.showmaker.service.SetmealService;
import com.showmaker.utils.QiNiuUtils;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;
import java.util.UUID;

@RestController
@RequestMapping("/setmeal")
public class SetmealController {

    @Autowired
    private RedisTemplate<String, String> redisTemplate;

    @DubboReference(interfaceClass = SetmealService.class, version = "1.0")
    private SetmealService setmealService;

    /**
     * 接收前端上传的文件
     * @param imgFile 上传的文件变量，与前端的变量名对应
     * @return
     */
    @RequestMapping("/upload")
    public Result upload(@RequestParam("imgFile") MultipartFile imgFile) {
        try {
            // 原始的文件名
            String originalFilename = imgFile.getOriginalFilename();
            // 获取原始文件的拓展名
            String extend = originalFilename.substring(originalFilename.lastIndexOf("."));
            // 将原始的文件名称使用 UUID 进行修改
            String fileName = UUID.randomUUID().toString() + extend;
            // 调用工具类，将文件上传到七牛云服务器
            QiNiuUtils.upload2Qiniu(imgFile.getBytes(), fileName);
            // 将上传的图片的名称添加到 redis 中的 set 集合中
            SetOperations<String, String> operations = redisTemplate.opsForSet();
            operations.add(RedisConstant.SETMEAL_PIC_RESOURCES, fileName);
            // 如果调用成功，需要将云存储中的文件名称一并返回给前端，以便于前端向云服务器获取到文件
            return new Result(true, MessageConstant.PIC_UPLOAD_SUCCESS, fileName);
        } catch (IOException e) {
            e.printStackTrace();
            return new Result(false, MessageConstant.PIC_UPLOAD_FAIL);
        }
    }

    /**
     * 添加检查组
     * @param checkgroupIds 套餐关联的检查组id
     * @param setmeal 套餐的具体信息
     * @return 返回添加检查组的结果
     */
    @PostMapping("/add/{checkgroupIds}")
    public Result add(@PathVariable Integer[] checkgroupIds, @RequestBody Setmeal setmeal) {
        // 调用添加方法，根据添加方法的结果，返回结果给前端页面
        try {
            setmealService.add(checkgroupIds, setmeal);
            return new Result(true, MessageConstant.ADD_SETMEAL_SUCCESS);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return new Result(false, MessageConstant.ADD_SETMEAL_FAIL);
    }

    /**
     * 分页查询
     * @param queryPageBean 分页查询的条件
     * @return 返回分页查询的结果
     */
    @PostMapping("/page")
    public PageResult page(@RequestBody QueryPageBean queryPageBean) {
        return setmealService.page(queryPageBean);
    }
}
